perm filename ARMFN[SYS,HE] blob
sn#070337 filedate 1973-11-08 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00003 00002 HOPEN: OPENS THE HAND TO SET POINT
00005 00003 HCLOSE:
00007 00004 HEAD: MOVEI K,HANDCHA
00009 00005 GOTHER: FSBR AC,TAC HAND SERVO
00010 00006 PLACE: PLACE HAND ON TABLE
00011 00007 NUDGE: HRRE TAC,@STKPTR
00013 00008 PATH: TRO RUN+VZERO
00015 00009 SAVE: HRRE K,@STKPTR
00018 00010 CENTER: TRNN HCL
00021 00011 SEARCH: SETZM XSEL
00024 00012 REFLEX: MOVEI I,1
00025 00013 XLIST
00026 ENDMK
⊗;
HOPEN: ;OPENS THE HAND TO SET POINT
TRNN HCL
JRST[ MOVEI TAC,=480 ;GO HERE FIRST TIME
MOVEM TAC,HCNT ;MAX TIME TO SERVO THERE
ADDI TAC,=60
MOVEM TAC,COUNT
HRLZ AC,@STKPTR ;REQUIRED OPENING
MOVE MQ,[3.6]
CAML AC,MQ
MOVE AC,MQ ;NOT GREATER THAN 2.5
MOVEM AC,RSET ;REQUIRED FINAL SET POINT
IFE USER,< PUSHJ P,HEAD ;READS THE HAND>
MOVE AC,HAND ;AND STORE IT HERE
MOVEM AC,SET ;DYNAMIC SET POINT
TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
MOVE TAC,[0.2]
CAML AC,RSET
MOVN TAC,TAC
MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
TRO HCL ;SO THAT WE DON'T COME BACK HERE
JUMPGE TAC,NXTJIF
FSC TAC,-1 ;IF CLOSING GO SLOWER
MOVEM TAC,DIR
SKIPE SOTCH ;AND RESTORE TOUCH
TRO STCH
JRST NXTJIF]
HSU: PUSHJ P, HEAD ;INCREMENTS SETPOINT AND SETS D/A
;LEAVES ARM DATAO IN TAC
IFE HANDWORK <
JRST NEXT
>
SOSGE HCNT
JRST[ MOVEI AC,HTERR
MOVEM AC,TRAJER
POP P,AC
JRST TOFF]
SKIPE DIR
JRST DAW ;IF NOT AT FINAL SET DRIVE ANYWAY
MOVE AC,RSET
FSBR AC,HAND ;CHECK ERROR TOLERANCE
MOVM AC,AC
FSBR AC,[0.05]
JUMPLE AC,[ TRZ HCL
TDZ DATWD,HANDAT
JRST NEXT]
DAW:
IFN TRACK,<SKIPN WALK>
DATAO ARM,DATWD ;DRIVE HAND
JRST NXTJIF
HCLOSE:
TRNN HCL ;ONLY ONCE
JRST[ TRZ STCH ;TURN OFF TOUCH AND SAVE STATE
MOVEI TAC,=240
MOVEM TAC,COUNT
HRLZ AC,@STKPTR ;MINIMUN OPENING
MOVEM AC,MINDST
IFE USER,< PUSHJ P,HEAD ;READ HAND>
MOVE AC,HAND
MOVEM AC,SET
MOVE TAC,[-0.10]
MOVEM TAC,DIR ;CHANGE OF SET POINT PER JIFFY
MOVSI AC,(4.0)
MOVNM AC,RSET ;FINAL SET POINT -1 SO AS TO SQUEEZE
TRO HCL
JRST NXTJIF]
BB: PUSHJ P,HEAD
IFE HANDWORK <
JRST ER2
>
IFN TRACK,<SKIPN WALK>
DATAO ARM,DATWD ;DRIVE HAND
MOVE AC,HERR
CAMG AC,[0.50]
JRST NXTJIF ;IF ERROR LESS THAN 1 KEEP ON
ER2: TRZ HCL
TDZ DATWD,HANDAT
SKIPE SOTCH ;RESTORE TOUCH
TRO STCH
MOVE AC,MINDST
CAMG AC,HAND
JRST NEXT
MOVEI 1,GRASER ;IF LESS THAN MINOPENING GIVE ERROR
MOVEM 1,TRAJER
POP P,1
JRST TOFF
HEAD: MOVEI K,HANDCHA
IFE USER,<
PUSHJ P,PREAD ;READ HAND CHANNEL
LDB AC,SNUM
ANDI DACVAL,7777
ADDI AC,(DACVAL) ;ADD ALL THREE READINGS TOGETHER
FSC AC,220
FMPR AC,HSCALE
FADR AC,HOFF
MOVEM AC,HAND ;OPENING IN INCHES
>
IFN USER,<
MOVE AC,FUNCT
CAIN AC,1
JRST[ SKIPN DIR
JRST[ MOVE AC,RSET
JRST SFH]
MOVE AC,HAND
FADR AC,DIR
JRST SFH]
MOVE AC,HAND
FADR AC,DIR
CAMG AC,MINDST
MOVE AC,MINDST
SFH: MOVEM AC,HAND
>
IFN REPORT,<
PUSH DATA,[<SIXBIT/HAND/>+1]
PUSH DATA,HAND
>
SKIPN TAC,DIR
JRST[ MOVE TAC,SET
JRST GOTHER]
FADRB TAC,SET ;INCREMENT SET POINT
FSBR TAC,RSET ;NEGATIVE REMAINS TO GO
FMPR TAC,DIR
JUMPGE TAC,[ MOVE TAC,RSET ;GOT THERE
MOVEM TAC,SET
SETZM DIR
JRST GOTHER]
MOVE TAC,SET
GOTHER: FSBR AC,TAC ;HAND SERVO
EXCH AC,HERR
FSBR AC,HERR
FMPR AC,KVH
MOVN TAC,HERR
FMPR TAC,KEH
FADR AC,TAC
TDO DATWD,[HANDAT:XWD 4000,60]
JUMPGE AC,.+2
TRZ DATWD,40
MOVM AC,AC
FIX AC,211000
CAILE AC,776000
MOVEI AC,776000
TRC AC,400000
HRLI AC,6
IFN DEB<
MOVEM AC,HANDAW
>
IFN TRACK,<SKIPN WALK>
DATAO WIDTH,AC
POPJ P,
HSCALE: 1.32
HOFF: -0.81
DIR: 0 ;CHANGE OF SETPOINT PER JIFFY
SET: 0 ;DYNAMIC SET POINT
RSET: 0 ;FINAL SET POINT
MINDST: 0 ;MIN OPENING FOR CLOSE
HERR: 0 ;HAND POSITION ERROR
KEH: 5.0 ;ERROR GAIN
KVH: 10.0 ;VELOCITY GAIN
IFN DEB<
HANDAW: 0
>
PLACE: ;PLACE HAND ON TABLE
TRNN DROP ;ONLY COME HERE ONCE
JRST[ TRO DROP+RUN+VZERO
MOVEI 1,=360
MOVEM 1,COUNT
HRRE 1,@STKPTR
ADDI 1,(CBUF)
HRLI 1,(1)
HRRI 1,DELTH
BLT 1,DELTH+5 ;CHANGE OF THETA PER JIFFY
MOVEI 1,=12
MOVEM 1,HCNT ;DON'T STOP FOR THE FIRST 12 JIFFIES
MOVE DATWD,[770000252502]
HRRZM DATWD,FBI
JRST NXTJIF]
SOSL HCNT
JRST NXTJIF
IFN USER,<JRST PLACED>
EXL: MOVM AC,ET0+1
CAML AC,PLER
JRST PLACED
JRST NXTJIF
PLACED: SETZM FUNCT
JRST RUDONE
PLER: 0.6
NUDGE: HRRE TAC,@STKPTR
ADDI TAC,5(CBUF)
MOVEI I,5
NUL1: MOVE AC,(TAC)
MOVEM AC,DELTH(I)
TRNE NSET
JRST[ FADRM AC,TFF(I)
MOVN AC,AC
FADRM AC,DTH(I)
JRST .+1]
SOJ TAC,
SOJGE I,NUL1
TRZ NSET
HRRE 1,@STKPTR
ADDI 1,6(CBUF)
PUSHJ P,UPDC
HRRE 1,@STKPTR
ADDI 1,6(CBUF)
MOVE 2,7(1)
MOVEM 2,NTICKS
ADDI 2,=60
MOVEM 2,COUNT
TRO INCREM+RUN+VZERO
SETZM TICKS
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
PUSHJ P,NEXT
JRST NXTJIF
STOP: HRRE 1,@STKPTR
ADDI 1,(CBUF)
HRLI 1,(1)
HRRI 1,STQ
BLT 1,STQ+5
MOVEI I,5
SETZ AC,
DSTQ: MOVE TAC,STQ(I)
FDVR TAC,F0(I)
MOVM MQ,TAC
CAMGE MQ,[0.2]
SETZB TAC,STQ(I)
MOVEM TAC,STQ(I)
FMPR TAC,TAC
FADR AC,TAC
SOJGE I,DSTQ
MOVEM AC,SDTQ
SETZM ASTPP
TRO STP
JRST NEXT
TOOL: TRNN HCL
JRST[ HRRE TAC,@STKPTR
MOVM AC,TAC
CAIL AC,100
MOVEI AC,77
JUMPGE TAC,TDIP
TRC AC,177
TDIP: TRO AC,200
HRRM AC,TDAT
TRO HCL
JRST .+1]
SKIPG COUNT
JRST[ SETZM TDAT
DATAO DEVT,TDAT
TRZ HCL
JRST NEXT]
DATAO DEVT,TDAT
JRST NXTJIF
TDAT: 0
PATH: TRO RUN+VZERO
AOS DOING ;INCREASE TRAJECTORY NUMBER
HRRE TAC,@STKPTR
ADDI TAC,(CBUF)
HRRZ AC,(TAC)
MOVEM AC,NTICKS ;RUN TIME
MOVEI AC,=1800
MOVEM AC,COUNT
SETZM LOOP
MOVE TAC,[XWD LOOP,LOOP+1]
BLT TAC,LOOP+9
MOVEI I,5
HRRE K,@STKPTR
ADDI K,34
SUL: SUBI K,4
HRLZM K,TJ(I)
HRLZM K,TN(I)
MOVEI TAC,TJ(I)
MOVEM TAC,TP(I)
SETZM DTH(I)
SOJGE I,SUL
PUSHJ P,EVAL
TRZ INCREM
MOVEI I,5
MOVBK: MOVE AC,TH(I)
MOVEM AC,TF(I)
MOVEM AC,T0(I)
FSBR AC,TFF(I)
CAIN I,5
JRST[ MOVSI MQ,(180.0)
CAML AC,MQ
JRST[SETROT:FSC MQ,1
MOVN MQ,MQ
FADRM MQ,TH+5
FADRM MQ,ROT6
JRST MOVBK]
MOVN MQ,MQ
CAMG AC,MQ
JRST SETROT
JRST ADDTF]
ADDTF: MOVEM AC,DTH(I)
MOVN AC,AC
FADR AC,DDTH(I)
SETZM DDTH(I)
MOVEM AC,DELTH(I)
SETZM TD(I)
SOJGE I,MOVBK
PUSHJ P,EVAL
PUSHJ P,NXTH
SETZM TICKS
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
JRST NXTJIF
SAVE: HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
JUMPLE TAC,.+2
CAILE TAC,12
JRST[ MOVEI TAC,SAVERR
MOVEM TAC,TRAJER
JRST TOFF]
IMULI TAC,3
ADDI TAC,DTHS
MOVEI J,2
SAL1: MOVEI I,5
SOJ TAC,
SETZ AC,
SAL2: AOJ K,
MOVE MQ,DTH(I)
FMPR MQ,(K)
FADR AC,MQ
SOJGE I,SAL2
MOVEM AC,(TAC)
SOJGE J,SAL1
JRST NEXT
RESTORE:HRRE K,@STKPTR
ADDI K,(CBUF)
MOVE TAC,(K)
JUMPLE TAC,.+2
CAILE TAC,12
JRST[ MOVEI TAC,SAVERR
MOVEM TAC,TRAJER
JRST TOFF]
IMULI TAC,3
ADDI TAC,DTHS-1
ADDI K,22
MOVEI I,5
REL1: MOVE AC,(TAC)
FMPR AC,(K)
MOVE MQ,-1(TAC)
FMPR MQ,-1(K)
FADR AC,MQ
MOVE MQ,-2(TAC)
FMPR MQ,-2(K)
FADR AC,MQ
FADRM AC,DDTH(I)
SUBI K,3
SOJGE I,REL1
JRST NEXT
TIMFAC: 0.3
0.6
3.0
0.3
0.3
0.2
SET.ARM:HRRE I,@STKPTR
ADDI I,(CBUF)
HRRE AC,(I)
SOJL AC,.+2
CAIL AC,11
JRST[ MOVEI TAC,SAVERR
MOVEM TAC,TRAJER
JRST TOFF]
IMULI AC,3
HRRI TAC,DTHS(AC)
HRRZI MQ,2(TAC)
HRLI TAC,1(I)
BLT TAC,(MQ)
JRST NEXT
SLAVE: MOVEI K,15B23
MOVEI I,3
SLRP: PUSHJ P,PREAD
LDB AC,SNUM
SUBI AC,4000
MOVEM AC,POT(I)
SOJGE I,SLRP
TRNN HCL
JRST[ TRO RUN+VZERO
MOVE DATWD,[770000252502]
HRRZM DATWD,FBI
TRO HCL
MOVEI AC,=6000
MOVEM AC,COUNT
MOVEI I,3
SLZL: MOVE AC,POT(I)
MOVEM AC,POTZ(I)
SOJGE I,SLZL
JRST .+1]
MOVEI I,3
SLCH: MOVE AC,POT(I)
SUB AC,POTZ(I)
JUMPGE AC,[SUBI AC,400
JUMPGE AC,SLST
JRST SLZA]
ADDI AC,400
JUMPL AC,SLST
SLZA: SETZ AC,
SLST: FSC AC,213
MOVEM AC,POT(I)
SOJGE I,SLCH
SKIPE POT+3
JRST[ TRZ HCL
TRO FINAL
SETZM FUNCT
JRST NXTJIF]
HRRE K,@STKPTR
ADDI K,21(CBUF)
MOVEI I,5
SLL2: MOVE AC,POT+2
FMPR AC,(K)
MOVE MQ,POT+1
FMPR MQ,-1(K)
FADR AC,MQ
MOVE MQ,POT
FMPR MQ,-2(K)
FADR AC,MQ
FADRM AC,DTH(I)
SUBI K,3
SOJGE I,SLL2
JRST NXTJIF
POT: BLOCK 4
POTZ: BLOCK 4
CENTER: TRNN HCL
JRST[ TRO HCL
MOVEI TAC,=600
MOVEM TAC,COUNT
HRLZ AC,@STKPTR ;MINIMUN OPENING
MOVEM AC,MINDST
MOVSI AC,(4.0)
MOVNM AC,RSET
IFE USER,< PUSHJ P,HEAD>
MOVE AC,HAND
MOVEM AC,SET
TRZ STCH
MOVE TAC,[-0.02]
MOVEM TAC,DIR
JRST NXTJIF]
PUSHJ P,HEAD
IFE HANDWORK,<JRST ER2>
DATAO ARM,DATWD
TRNN DROP
JRST[ MOVEI I,1
CFT: MOVE AC,OBS(I)
JUMPG AC,[SETZM TOT
SKIPN I
AOS TOT
TRO DROP+RUN+VZERO
MOVE TAC,[-0.01]
MOVEM TAC,DIR
HRRE TAC,@STKPTR
ADDI TAC,(CBUF)
MOVE AC,(TAC)
MOVEM AC,MINDST
AOJ TAC,
MOVEI I,DELTH
OT: MOVE AC,(TAC)
FMPR AC,[0.005]
SKIPN TOT
MOVNS AC
MOVEM AC,(I)
AOJ TAC,
CAIGE I,DELTH+5
AOJA I,OT
MOVE TAC,[XWD 770000, 252500]
HRRZM TAC,FBI
IOR DATWD,TAC
MOVEI I,4
GETGO: PUSHJ P,NXTH
SOJGE I,GETGO
JRST NXTJIF]
SOJGE I,CFT
JRST NXTJIF]
MOVE TAC,TOT
SKIPG OBS(TAC)
JRST NXTJIF
TRZ DROP+RUN+FINAL
PUSHJ P,SETSET
TDZ DATWD,[XWD 770000,252500]
MOVE TAC,DIR
FSC TAC,3
MOVEM TAC,DIR
MOVEI TAC,2
MOVEM TAC,FUNCT
JRST NXTJIF]
TOT: 0
WOBBLE: HRLZ AC,@STKPTR
MOVEM AC,WOBMAG
MOVEI AC,1
MOVEM AC,WOBCNT+2
MOVEM AC,WOBCNT+1
MOVEI AC,6
MOVEM AC,WOBCNT
MOVN AC,WOBMAG
FADRM AC,DTH+3
TRO WOB
JRST NEXT
WOBMAG: 0
WOBCNT: BLOCK 3
SIN: 0.0
0.30902
0.58779
0.80902
0.95106
1.0
0.95106
0.80902
0.58779
0.30902
0.0
-0.30902
-0.58779
-0.80902
-0.95106
-1.0
-0.95106
-0.80902
-0.58779
-0.30902
SEARCH: SETZM XSEL
SETZM SCOUNT
SETZM TCOUNT
HRRE 1,@STKPTR
ADDI 1,(CBUF)
HRLI 1,(1)
HRRI 1,XDEL
BLT 1,YDEL+5
SETZM SDTH
MOVE AC,[XWD SDTH,SDTH+1]
BLT AC,SDTH+5
JRST NEXT
AOJI: MOVEI I,5
MOVE K,SCOUNT
SOSG J,TCOUNT
JRST[ SKIPN XSEL
AOS K,SCOUNT
SETCMM XSEL
MOVEI J,(K)
MOVEM J,TCOUNT
JRST .+1]
SKIPE XSEL
JRST[IX:MOVE AC,XDEL(I)
TRNN K,1
MOVN AC,AC
FADRB AC,SDTH(I)
FADRM AC,DDTH(I)
SOJGE I,IX
JRST NJ]
IY: MOVE AC,YDEL(I)
TRNN K,1
MOVN AC,AC
FADRB AC,SDTH(I)
FADRM AC,DDTH(I)
SOJGE I,IY
NJ: HRRE TAC,@STKPTR
ADD TAC,STKPTR
SOJ TAC,
HRRM TAC,STKPTR
JRST NEXT
TCOUNT: 0
SCOUNT: 0
XSEL: 0
XDEL: BLOCK 6
YDEL: BLOCK 6
SDTH: BLOCK 6
HOME: HRRE TAC,@STKPTR
ADDI TAC,5(CBUF)
MOVEI I,5
HLN: MOVE AC,(TAC)
FADR AC,6(TAC)
MOVEM AC,TFF(I)
FSBR AC,T0(I)
MOVNM AC,DTH(I)
FADR AC,DDTH(I)
SETZM DDTH(I)
MOVEM AC,DELTH(I)
SOJ TAC,
SOJGE I,HLN
MOVEI I,5
MOVE TAC,DELTH+5
CAML TAC,[180.0]
JRST[ FSBR TAC,[360.0]
JRST .-1]
CAMGE TAC,[-180.0]
JRST[ FADR TAC,[360.0]
JRST .-1]
MOVEM TAC,DELTH+5
HRRE AC,@STKPTR
ADDI AC,=12(CBUF)
PUSHJ P,UPDC
HRRE AC,@STKPTR
ADDI AC,=12(CBUF)
MOVE TAC,7(AC)
MOVEM TAC,NTICKS
MOVEI I,5
SETZ MQ,
HNCCA: MOVM TAC1,DELTH(I)
FMPR TAC1,TIMFAC(I)
CAML TAC1,MQ
MOVE MQ,TAC1
SOJGE I,HNCCA
FADR MQ,[20.0]
FIX MQ,233000
CAML MQ,NTICKS
MOVEM MQ,NTICKS
ADDI MQ,=60
MOVEM MQ,COUNT
TRO INCREM+RUN+VZERO+NSET
SETZM TICKS
MOVE AC,STKPTR
TRNE BOTH
AOJ AC,
HLRZ AC,1(AC)
CAIE AC,5
TRZ NSET
TRZE BOTH
JRST[ AOS AC,STKPTR
HLRE AC,(AC)
MOVEM AC,FUNCT
JRST .+2]
SETZM FUNCT
PUSHJ P,NXTH
JRST NXTJIF
REFLEX: MOVEI I,1
MOVEI K,65B23
REX:
IFE USER,<
PUSHJ P,PREAD
LDB AC,[POINT 12,DACVAL,11]
ADD AC,REF(I)
MOVEM AC,OBS(I)
>
RMOR: SOJGE I,REX
TRNN STCH
POPJ P,
MOVEI I,1
SIT: MOVE AC,OBS(I)
JUMPG AC,[ LSH I,3
IORI I,TOUCH
MOVEM I,TRAJER
POP P,I
JRST TOFF]
SOJGE I,SIT
POPJ P,
REF: -1000
-1000
BLOCK 4
IFN SIMU,<
OBS-1
ARM.TO: .+4
>
OBS: 0
0
SOTCHS: 0
SETCH: MOVE AC,SOTCH
MOVEM AC,SOTCHS
HRLE AC,@STKPTR
MOVEM AC,SOTCH
JUMPE AC,NEXT
TRO STCH
JRST NEXT
XLIST
LIT
LIST
IFE SIMU,<END START>
IFN SIMU,<END>